adds r18=IA64_VPD_BASE_OFFSET,r21
;;
ld8 r18=[r18] //vpd
+ adds r17=IA64_VCPU_ISR_OFFSET,r21
;;
+ ld8 r17=[r17]
adds r19=VPD(VPSR),r18
;;
ld8 r19=[r19] //vpsr
/*
* must be at bank 0
* parameter:
+ * r17:cr.isr
* r18:vpd
* r19:vpsr
* r20:__vsa_base
tbit.nz p1,p2 = r19,IA64_PSR_IC_BIT // p1=vpsr.ic
;;
(p1) add r29=PAL_VPS_RESUME_NORMAL,r20
+ (p1) br.sptk.many ia64_vmm_entry_out
+ ;;
+ tbit.nz p1,p2 = r17,IA64_ISR_IR_BIT //p1=cr.isr.ir
+ ;;
+ (p1) add r29=PAL_VPS_RESUME_NORMAL,r20
(p2) add r29=PAL_VPS_RESUME_HANDLER,r20
;;
+ia64_vmm_entry_out:
mov pr=r23,-2
mov b0=r29
;;
{
u64 viva;
REGS *regs;
+ ISR pt_isr;
regs=vcpu_regs(vcpu);
-
+ // clear cr.isr.ri
+ pt_isr.val = VMX(vcpu,cr_isr);
+ pt_isr.ir = 0;
+ VMX(vcpu,cr_isr) = pt_isr.val;
collect_interruption(vcpu);
vmx_vcpu_get_iva(vcpu,&viva);